package OpticaDAOS;

import Herramientas.PasarelaDatos;
import Herramientas.ResultSets;
import OpticaDTOS.HistorialClinicoDTO;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.Vector;
import java.util.logging.Level;
import java.util.logging.Logger;

/**
 * @author Alan Gonzalez
 */
public class HistorialClinicoDAO {

    private PasarelaDatos db;
    private ResultSets res;

    public HistorialClinicoDAO() {
        db = new PasarelaDatos();
        res = new ResultSets();
    }

    /**
     * ALAN GONZALEZ -- SELECCIONA REGISTROS VINCULADOS AL ID DEL CLIENTE
     *
     * @param idCliente
     * @return
     */
    public Vector seleccionarPorIdCliente(int idCliente) {
        Vector v = new Vector();
        ResultSet rst = null;
        String query = "SELECT * FROM historial_clinico WHERE estado > 0 AND id_cliente =" + idCliente + " ORDER BY historial_clinico.fecha_creacion DESC";
        db.openDatabase();
        rst = db.executeQuery(query);
        try {
            while (rst.next()) {
                HistorialClinicoDTO historialClinicoDTO = new HistorialClinicoDTO();
                historialClinicoDTO = res.histroialClinicoDTO(rst);
                v.add(historialClinicoDTO);
            }
        } catch (SQLException ex) {
            Logger.getLogger(HistorialClinicoDAO.class.getName()).log(Level.SEVERE, null, ex);
        }
        db.closeDatabase();
        return v;
    }

    /**
     * ALAN METODO QUE CARGA LA AÑO Y MES DE MANERA SEPARADA PARA PODER SER
     * VISIALIZADA EN LA INTERFAZ (COMBOS DINAMICOS)
     *
     * @param h
     * @return
     */
    public HistorialClinicoDTO fechaSeparada(HistorialClinicoDTO original) {
        HistorialClinicoDTO editado = new HistorialClinicoDTO();
        editado = original;

        db.openDatabase();
        String queryAnio = "SELECT year(historial_clinico.ultimo_examen) AS anio FROM historial_clinico WHERE historial_clinico.id=" + editado.getId() + ";";
        ResultSet rst, rst2 = null;
        rst = db.executeQuery(queryAnio);
        try {
            while (rst.next()) {
                editado.setAnioUltimoExamen(rst.getInt("anio"));
            }
        } catch (SQLException ex) {
            Logger.getLogger(HistorialClinicoDAO.class.getName()).log(Level.SEVERE, null, ex);
        }
        String queryMes = "SELECT month(historial_clinico.ultimo_examen) AS mes FROM historial_clinico WHERE historial_clinico.id=" + editado.getId() + ";";
        rst2 = db.executeQuery(queryMes);
        try {
            while (rst2.next()) {
                editado.setMesUltimoExamen(rst2.getInt("mes"));
            }
        } catch (SQLException ex) {
            Logger.getLogger(HistorialClinicoDAO.class.getName()).log(Level.SEVERE, null, ex);
        }
        db.closeDatabase();
        return editado;
    }

    /**
     * ALAN GONZALEZ -- SELECCIONA REGISTRO SEGUN ID
     *
     * @param id
     * @return
     */
    public HistorialClinicoDTO SeleccionarHistorialID(int id) {
        HistorialClinicoDTO historialClinicoDTO = new HistorialClinicoDTO();
        db.openDatabase();
        ResultSet rst = null;
        String query = "SELECT * FROM historial_clinico WHERE id = " + id;
        rst = db.executeQuery(query);
        try {
            if (rst.next()) {
                historialClinicoDTO = res.histroialClinicoDTO(rst);
                historialClinicoDTO = this.fechaSeparada(historialClinicoDTO);
            }
        } catch (SQLException ex) {
            Logger.getLogger(HistorialClinicoDAO.class.getName()).log(Level.SEVERE, null, ex);
        }
        return historialClinicoDTO;
    }

    /**
     * ALAN GONZALEZ - NUEVO REGISTRO
     *
     * @param h
     */
    public void nuevoRegistro(HistorialClinicoDTO h) {
        db.openDatabase();
        String query = new String();
        query = "  INSERT INTO historial_clinico SET ";
        query += "  id = 0";
        query += " , id_cliente =" + h.getIdCliente();
        query += " , principal_problema = '" + h.getPrincipalProblema() + "'";
        query += " , ultimo_examen='" + h.getUltimoExamen() + "'";
        query += " , mejor_vista =" + h.getMejorVista();
        query += " , tipo_luz_sencibilidad =" + h.getTipoLuzSencibilidad();
        query += " , od= '" + h.getOd() + "'";
        query += " , od_x='" + h.getOdx() + "'";
        query += " , oi='" + h.getOi() + "'";
        query += " , oi_x='" + h.getOix() + "'";
        query += " , ojos_ardor=" + h.getOjosArdor();
        query += " , ojos_llorosos=" + h.getOjosLlorosos();
        query += " , diabetes=" + h.getDiabetes();
        query += " , hipertension=" + h.getHipertension();
        query += " , alergias=" + h.getAlergias();
        
        query += " , modelo= '" + h.getModelo()+ "'";
        query += " , materiales= '" + h.getMateriales() + "'";
        query += " , fecha_creacion= now()";

        
        query += " , avscod = " + h.getAvscod();
        query += " , avscoi = " + h.getAvscoi();
        
        query += " , avccrxod = " + h.getAvccrxod();
        query += " , avccrxoi = " + h.getAvccrxoi();
        
        query += " , avcaeod = " + h.getAvcaeod();
        query += " , avcaeoi = " + h.getAvcaeoi();
        
        query += " , odesf = " + h.getOdesf();
        query += " , odcil = " + h.getOdcil();
        query += " , odeje = " + h.getOdeje();
        query += " , odadd = " + h.getOdadd();
        query += " , odaltura = " + h.getOdalt();
        query += " , oddi = "  + h.getOddi();
        
        query += " , oiesf = " + h.getOiesf();
        query += " , oicil = " + h.getOicil();
        query += " , oieje = " + h.getOieje();
        query += " , oiadd = " + h.getOiadd();
        query += " , oialtura = " + h.getOialt();
        query += " , oidi = "  + h.getOidi();

        query += " , estado= 1";
        
        System.out.println("QUERY EDITADA");
        System.out.println(query);        
        System.out.println("QUERY EDITADA");

// AGREGADOS
        db.execute(query);
        db.closeDatabase();
    }

    /**
     * ALAN GONZALEZ - ACTUALIZACION DE REGISTRO
     *
     * @param h
     */
    public void actualizar(HistorialClinicoDTO h) {
        db.openDatabase();
        String query = new String();
        query = "  UPDATE historial_clinico SET ";
        query += "  id = 0";
        query += " , id_cliente =" + h.getIdCliente();
        query += " , principal_problema = '" + h.getPrincipalProblema() + "'";
        query += " , ultimo_examen='" + h.getUltimoExamen() + "'";
        query += " , mejor_vista =" + h.getMejorVista();
        query += " , tipo_luz_sencibilidad =" + h.getTipoLuzSencibilidad();
        query += " , od= '" + h.getOd() + "'";
        query += " , od_x='" + h.getOdx() + "'";
        query += " , oi='" + h.getOi() + "'";
        query += " , oi_x='" + h.getOix() + "'";
        query += " , ojos_ardor=" + h.getOjosArdor();
        query += " , ojos_llorosos=" + h.getOjosLlorosos();
        query += " , diabetes=" + h.getDiabetes();
        query += " , hipertension=" + h.getHipertension();
        query += " , alergias=" + h.getAlergias();
        query += " , materiales= '" + h.getMateriales() + "'";
        db.execute(query);
        db.closeDatabase();
    }

    /**
     * ALAN GONZALEZ - BORRADO LOGICO
     *
     * @param idRegistro
     */
    public void borradoLogico(int idRegistro) {
        db.openDatabase();
        String query = "update historial_clinico set estado = 0 WHERE  id_historial = " + idRegistro;
        db.execute(query);
        db.closeDatabase();
    }
}
